/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.HistoriaClinica;
import modelo.Paciente;
import sun.net.ConnectionResetException;
import utilidades.ConexionBaseDtos;

/**
 *
 * @author Miguel
 */
public class PostgresUsuarioDao implements UsuarioDao{

    private Connection conn=null;

    public PostgresUsuarioDao() {
        conn=ConexionBaseDtos.ObternerConexion();
    }

    @Override
    public HistoriaClinica consultarhistoriaclinica(long Cedula_Paciente){
        HistoriaClinica h1=null;
        try {
            String sql="select * from \"HistoriaClinica\" where \"CedulaPaciente\"='"+Cedula_Paciente+"'";
            Statement consultahistoria=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet datos=consultahistoria.executeQuery(sql);
            datos.beforeFirst();
            if(datos.next())
            {
                h1=new HistoriaClinica(
                        datos.getLong("CedulaPaciente"),
                        datos.getString("Enfermedades"),
                        datos.getString("Medicamentos"),
                        datos.getInt("Presionarterial"),
                        datos.getInt("Pulso"),
                        datos.getInt("Temperatura"),
                        datos.getInt("Respiracion"));
            }
            datos.close();
            consultahistoria.close();
            return h1;
        } catch (SQLException e) 
        {
            return h1;
        }
    }

    @Override
    public Paciente consultarpaciente(String Datodebusqueda){
        Paciente p1=null;
        try {
            String sql="select * from paciente where \"Cedula_Paciente\"='"+Datodebusqueda+"' or \"Nombre\"='"+Datodebusqueda+"'";
            Statement getlistadopaciente=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet listadopacientes=getlistadopaciente.executeQuery(sql);
            listadopacientes.beforeFirst();
            if(listadopacientes.next())
            {
                p1 = new Paciente(listadopacientes.getLong("Cedula_Paciente"),
                        listadopacientes.getString("Nombre"),
                        listadopacientes.getString("Apellido"),
                        listadopacientes.getString("Grupo_Etnico"),
                        listadopacientes.getString("Grupo_Sanguineo"),
                        listadopacientes.getString("RH"),
                        listadopacientes.getString("Ciudad"),
                        listadopacientes.getString("Telefono"),
                        listadopacientes.getString("Direccion"),
                        listadopacientes.getInt("Edad"),
                        listadopacientes.getLong("Cedula_Responsable"), 
                        listadopacientes.getString("NombreRes"),
                        listadopacientes.getString("ApellidosRes"),
                        listadopacientes.getInt("EdadRes"),
                        listadopacientes.getString("TelefonoRes"), 
                        listadopacientes.getString("DireccionRes"));
            }
            listadopacientes.close();
            getlistadopaciente.close();
            return p1;
        } catch (SQLException ex) {
            Logger.getLogger(PostgresUsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            return p1;
        }
    }

    @Override
    public String crearhistoriaclinica(HistoriaClinica historia){
        try {
            String sql="insert into \"HistoriaClinica\" (\"CedulaPaciente\",\"Enfermedades\",\"Medicamentos\",\"Presionarterial\",\"Pulso\",\"Temperatura\",\"Respiracion\")"
                    + "values ('"+historia.getCedulaPaciente()
                    +"','"+historia.getEnfermedades()
                    +"','"+historia.getMedicamentos()
                    +"','"+historia.getPresionarterial()
                    +"','"+historia.getPulso()
                    +"','"+historia.getTemperatura()
                    +"','"+historia.getRespiracion()+"')";
            Statement crearhistoria=conn.createStatement();
            crearhistoria.executeUpdate(sql);
            crearhistoria.close();
            return "Se creo la historia clinica con exito";
        } catch (SQLException e) {
            return "Se presento el siguiente error en la creacion de la historia "+e.getMessage();
        }
    }

    @Override
    public String crearpaciente(Paciente nuevopaciente) {
        try {
            String sql="insert into public.paciente(\"Cedula_Paciente\",\"Nombre\",\"Apellido\","
                    + "\"Grupo_Etnico\",\"Grupo_Sanguineo\",\"RH\",\"Ciudad\",\"Telefono\",\"Direccion\",\"Edad\","
                    + "\"Cedula_Responsable\",\"NombreRes\",\"ApellidosRes\",\"EdadRes\",\"TelefonoRes\",\"DireccionRes\")"
                    + "values ('"
                    +nuevopaciente.getCedula_Paciente()
                    +"','"+nuevopaciente.getNombre()
                    +"','"+nuevopaciente.getApellido()
                    +"','"+nuevopaciente.getGrupo_Etnico()
                    +"','"+nuevopaciente.getGrupo_Sanguineo()
                    +"','"+nuevopaciente.getRH()
                    +"','"+nuevopaciente.getCiudad()
                    +"','"+nuevopaciente.getTelefono()
                    +"','"+nuevopaciente.getDireccion()
                    +"','"+nuevopaciente.getEdad()
                    +"','"+nuevopaciente.getCedula_Responsable()
                    +"','"+nuevopaciente.getNombreRes()
                    +"','"+nuevopaciente.getApellidoRes()
                    +"','"+nuevopaciente.getEdadRes()
                    +"','"+nuevopaciente.getTelefonoRes()
                    +"','"+nuevopaciente.getDireccionRes()+"')";
            Statement ingresapaciente=conn.createStatement();
            ingresapaciente.executeUpdate(sql);
            ingresapaciente.close();
            return "Se almaceno el paciente de manera exitosa";
        } catch (SQLException ex) {
            Logger.getLogger(PostgresUsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            return "Se presento un error en la carga de los datos a la base de datos "+ex.getMessage();
        }
    }

    @Override
    public boolean validarpaciente(long Cedula_Paciente) {
        try {
            boolean con;
            String sql="select * from paciente where \"Cedula_Paciente\"='"+Cedula_Paciente+"'";
            Statement consultapaciente=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet respuesta=consultapaciente.executeQuery(sql);
            respuesta.beforeFirst();
            con=respuesta.next();
            respuesta.close();
            consultapaciente.close();
            return con;
        } catch (SQLException ex) {
            Logger.getLogger(PostgresUsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
}
